package com.hnweaver.Util;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.weaver.general.Util;
import org.apache.commons.lang3.StringUtils;
import weaver.hrm.User;
import weaver.soa.workflow.request.*;

/**
 * @author clj
 * @createTime 2022/12/12 14:34
 * @Description
 */
public class FlowUtil {

    public JSONObject showCurrentForm(RequestInfo requestInfo) {
        JSONObject jsonObject = new JSONObject();
        String requestId = requestInfo.getRequestid(); // 请求ID
        jsonObject.put("requestId", requestId);
        String requestLevel = requestInfo.getRequestlevel(); // 请求紧急程度
        jsonObject.put("requestLevel", requestLevel);
        // 当前操作类型 submit:提交/reject:退回
        String src = requestInfo.getRequestManager().getSrc();
        jsonObject.put("src", src);
        // 流程ID
        String workFlowId = requestInfo.getWorkflowid();
        jsonObject.put("workFlowId", workFlowId);
        // 表单名称
        String tableName = requestInfo.getRequestManager().getBillTableName();
        jsonObject.put("tableName", tableName);
        // 表单数据ID
        int bill_id = requestInfo.getRequestManager().getBillid();
        jsonObject.put("bill_id", bill_id);
        // 获取当前操作用户对象
        User user = requestInfo.getRequestManager().getUser();
        jsonObject.put("user", user);
        // 请求标题
        String requestName = requestInfo.getRequestManager().getRequestname();
        jsonObject.put("requestName", requestName);
        // 当前用户提交时的签字意见
        String remark = requestInfo.getRequestManager().getRemark();
        jsonObject.put("remark", remark);
        // 表单ID
        int form_id = requestInfo.getRequestManager().getFormid();
        jsonObject.put("form_id", form_id);
        // 是否是自定义表单
        int isBill = requestInfo.getRequestManager().getIsbill();
        jsonObject.put("isBill", isBill);
        return jsonObject;
    }

    /**
     * 获取主表数据
     */
    public JSONObject getFormProperty(RequestInfo requestInfo) {
        JSONObject jsonObject = new JSONObject();
        // 获取表单主字段值
        Property[] properties = requestInfo.getMainTableInfo().getProperty();
        for (Property property : properties) {
            // 主字段名称
            String name = property.getName();
            // 主字段对应的值
            String value = Util.null2String(property.getValue());
            jsonObject.put(name, value);
        }
        return jsonObject;
    }

    /**
     * @param requestInfo
     * @param tableName   明细表表名
     * @return 获取明细表数据，空的话就查询所有
     */
    public JSONObject getDetailsTables(RequestInfo requestInfo, String tableName) {
        JSONObject jsonObject = new JSONObject();
        // 获取所有明细表
        DetailTable[] detailTables = requestInfo.getDetailTableInfo().getDetailTable();
        if (detailTables.length > 0) {
            for (DetailTable table : detailTables) {
                if (StringUtils.isNotEmpty(tableName) && !tableName.equals(table.getTableDBName())) {
                    continue;
                }
                JSONArray jsonArray = new JSONArray();
                // 当前明细表的所有数据，按行存储
                Row[] rows = table.getRow();
                for (Row row : rows) {
                    JSONObject rowJson = new JSONObject();
                    // 每行数据再按列存储
                    Cell[] cells = row.getCell();
                    for (Cell cell : cells) {
                        // 明细字段名称
                        String name = cell.getName();
                        // 明细字段的值
                        String value = cell.getValue();
                        rowJson.put(name, value);
                    }
                    jsonArray.add(rowJson);
                }
                jsonObject.put(table.getTableDBName(),jsonArray);
            }
        }
        return jsonObject;
    }
}
